#pragma once
#include <string>
#include <rga/im2d.hpp>

namespace lsy {

/// 宽大于等于128，且是16的倍数；高限制为大于等于67。
/// std::pair<int32_t, int32_t>->{w, h}
/// 只给bgr24做了适配，其余的并没有适配，如有有需要，请写一个新的，不要动源代码
class RKRga
{
public:
    /// \brief 如果 inputSize 等于 outputSize，那么是颜色转换
    /// \brief 如果开启 scale，那么原图会等比缩放，小于输出的地方，会被补上0x80
    /// \brief 如果 startPoint 这里是基于原始图片的偏移量，为{0,0}那么是缩放，如果有值，那么就是剪切图片，剪切的大小就是 outputSize 的大小
    ///    注意：在启动剪切的时候，scale应该是false。
    int process(std::string &srcBuf, std::string &dstBuf,
                const std::pair<int32_t, int32_t> &inputSize,
                const std::pair<int32_t, int32_t> &outputSize,
                const std::pair<int32_t, int32_t> &startPoint = {0, 0},
                bool scale = false);
    void format_change(RgaSURF_FORMAT input, RgaSURF_FORMAT output);

    /// 扣图 (输入大小 > 输出大小),扣图效率上和process没有区别，但是提供了自适应尺寸的接口
    int crop_auto(std::string &srcBuf, std::string &dstBuf,
                  const std::pair<int32_t, int32_t> &inputSize,
                  std::pair<int32_t, int32_t> &outputSize,
                  int left, int top, int right, int bottom);
    void crop_fmt_change(RgaSURF_FORMAT input, RgaSURF_FORMAT output);

private:
    RgaSURF_FORMAT fmtInput = RK_FORMAT_YCbCr_420_SP;
    RgaSURF_FORMAT fmtOutput = RK_FORMAT_BGR_888;

    RgaSURF_FORMAT cropfmtInput = RK_FORMAT_YCbCr_420_SP;
    RgaSURF_FORMAT cropfmtOutput = RK_FORMAT_BGR_888;
};
}

